package com.wst.wst_server.utils;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Component
public class CustomDateConvertor implements Converter<String, Date> {
    private static final List<String> formats = new ArrayList<>();
    static {
        formats.add("yyyy-MM-dd");
        formats.add("yyyy年MM月dd日");
        formats.add("yyyy-MM");
        formats.add("yyyy-MM-dd HH:mm:ss");
    }
    @Override
    public Date convert(String source) {
        String value = source.trim();
        if (value.equals("")){
            return null;
        }
        String reg1 = "^[1-9]\\d{3}-(0[1-9]|1[0-2])$";
        String reg2 = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2]10-9]|3[0-1])$";
        String reg3 = "^[1-9]\\d{3}年(0[1-9]|1[0-2])月(0[1-9]|[1-2]10-9]|3[0-1])日$";
        String reg4 = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2]10-9]|3[0-1])\\s+(20|21|23[0-1]\\d):[0-5]\\d:[0-5]\\d$";
        try {
            if (source.matches(reg1)){

                return parseDate(source,formats.get(2));
            }else if (source.matches(reg2)){
                return parseDate(source,formats.get(0));
            }else if (source.matches(reg3)){
                return parseDate(source,formats.get(1));
            }else if (source.matches(reg4)){
                return parseDate(source,formats.get(3));
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    private Date parseDate(String s,String s1) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(s1);
        return sdf.parse(s);
    }
}
